package com.zenithmind.task.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zenithmind.common.result.PageResult;
import com.zenithmind.task.pojo.entity.TaskAssignment;
import com.zenithmind.task.pojo.query.TaskAssignmentQuery;
import com.zenithmind.task.pojo.vo.TaskAssignmentVO;

import java.util.List;

/**
 * 任务分配服务接口
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface TaskAssignmentService extends IService<TaskAssignment> {

    /**
     * 分页查询任务分配列表
     *
     * @param query 查询条件
     * @param userId 当前用户ID
     * @return 分页结果
     */
    PageResult<TaskAssignmentVO> getTaskAssignmentPage(TaskAssignmentQuery query, String userId);

    /**
     * 根据ID查询任务分配详情
     * 
     * @param id 分配ID
     * @param userId 当前用户ID
     * @return 分配详情
     */
    TaskAssignmentVO getTaskAssignmentById(String id, String userId);

    /**
     * 创建任务分配
     * 
     * @param taskAssignment 分配信息
     * @param userId 创建者ID
     * @return 创建结果
     */
    Boolean createTaskAssignment(TaskAssignment taskAssignment, String userId);

    /**
     * 更新任务分配
     * 
     * @param taskAssignment 分配信息
     * @param userId 操作者ID
     * @return 更新结果
     */
    Boolean updateTaskAssignment(TaskAssignment taskAssignment, String userId);

    /**
     * 删除任务分配
     * 
     * @param id 分配ID
     * @param userId 操作者ID
     * @return 删除结果
     */
    Boolean deleteTaskAssignment(String id, String userId);

    /**
     * 批量删除任务分配
     * 
     * @param ids 分配ID列表
     * @param userId 操作者ID
     * @return 删除结果
     */
    Boolean batchDeleteTaskAssignments(List<String> ids, String userId);

    /**
     * 接受任务分配
     * 
     * @param id 分配ID
     * @param userId 用户ID
     * @return 接受结果
     */
    Boolean acceptTaskAssignment(String id, String userId);

    /**
     * 拒绝任务分配
     * 
     * @param id 分配ID
     * @param reason 拒绝原因
     * @param userId 用户ID
     * @return 拒绝结果
     */
    Boolean rejectTaskAssignment(String id, String reason, String userId);

    /**
     * 查询用户的任务分配
     * 
     * @param userId 用户ID
     * @param status 分配状态
     * @return 分配列表
     */
    List<TaskAssignmentVO> getUserTaskAssignments(String userId, Integer status);

    /**
     * 查询任务的分配列表
     * 
     * @param taskId 任务ID
     * @param userId 当前用户ID
     * @return 分配列表
     */
    List<TaskAssignmentVO> getTaskAssignments(String taskId, String userId);
}
